﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Rance.Battle;

namespace Rance
{
    /// <summary>
    /// Win_ComputerFightSetting.xaml 的交互逻辑
    /// </summary>
    public partial class Win_ComputerFightSetting : Window
    {
        private UIFightSetting uiFightSetting = new UIFightSetting();

        public Win_ComputerFightSetting()
        {
            InitializeComponent();

            RanceEntities entities = new RanceEntities();
            var list = (from t in entities.Team
                        orderby t.Name
                        select t).ToList();
            this.cmbTeamA.ItemsSource = this.cmbTeamB.ItemsSource = list;
            this.cmbType.ItemsSource = new List<战地类型>() { 战地类型.野战, 战地类型.进攻_山寨, 战地类型.进攻_小镇, 战地类型.进攻_城市, 战地类型.防守_山寨, 战地类型.防守_小镇, 战地类型.防守_城市 };
            this.DataContext = uiFightSetting;
        }

        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            if (uiFightSetting.TeamA == null)
            {
                MessageBox.Show("请选择队伍1");
                return;
            }
            if (uiFightSetting.TeamB == null)
            {
                MessageBox.Show("请选择队伍2");
                return;
            }

            RanceEntities entities = new RanceEntities();
            uiFightSetting.TeamA = (from t in entities.Team
                                    where t.ID == uiFightSetting.TeamA.ID
                                    select t).SingleOrDefault();
            uiFightSetting.TeamB = (from t in entities.Team
                                    where t.ID == uiFightSetting.TeamB.ID
                                    select t).SingleOrDefault();

            Data战斗 data战斗 = new Data战斗();
            data战斗.战地类型 = uiFightSetting.Type;
            data战斗.队伍1 = new Data战斗队伍();
            data战斗.队伍1.Name = uiFightSetting.TeamA.Name;
            data战斗.队伍1.IsUser = true;
            data战斗.队伍1.List = new List<Data战斗角色>();
            foreach (var item in uiFightSetting.TeamA.TeamRole)
            {
                Data战斗角色 data战斗角色 = new Data战斗角色();
                data战斗角色.Name = item.Role.Name.Trim();
                data战斗角色.兵力 = item.Role.兵力;
                data战斗角色.最大兵力 = item.Role.兵力;
                data战斗角色.兵种 = item.Role.兵种.Trim();
                data战斗角色.排 = item.排;
                data战斗角色.列 = item.列;
                data战斗角色.攻 = item.Role.攻;
                data战斗角色.防 = item.Role.防;
                data战斗角色.智 = item.Role.智;
                data战斗角色.速 = item.Role.速;
                data战斗角色.特殊人物 = item.Role.特殊人物;
                data战斗角色.最大行动点 = item.Role.行动点;
                data战斗角色.技能1 = item.Role.基础攻击技能;
                data战斗角色.技能2 = item.Role.技能1;
                data战斗角色.技能3 = item.Role.技能2;
                data战斗角色.技能4 = item.Role.被动技能;
                data战斗角色.隐藏技能 = item.Role.特殊技能;
                data战斗角色.装备 = item.Role.装备;

                if (data战斗角色.技能4 != null)
                {
                    var selectList = Rance.Battle.战斗管理.GetSelectList(data战斗角色.技能4.Trim());
                    if (selectList != null)
                    {
                        UI技能选择 技能选择 = new UI技能选择()
                        {
                            队伍 = data战斗.队伍1.Name,
                            角色 = data战斗角色.Name,
                            技能 = data战斗角色.技能4,
                            SelectList = selectList
                        };
                        Win_Fight_SkillSelect win = new Win_Fight_SkillSelect(技能选择);
                        win.ShowDialog();
                        data战斗角色.战斗开始被动技能选择 = 技能选择.Select;
                    }
                }

                data战斗.队伍1.List.Add(data战斗角色);
            }

            data战斗.队伍2 = new Data战斗队伍();
            data战斗.队伍2.Name = uiFightSetting.TeamB.Name;
            data战斗.队伍2.IsUser = false;
            data战斗.队伍2.List = new List<Data战斗角色>();
            foreach (var item in uiFightSetting.TeamB.TeamRole)
            {
                Data战斗角色 data战斗角色 = new Data战斗角色();
                data战斗角色.Name = item.Role.Name.Trim();
                data战斗角色.兵力 = item.Role.兵力;
                data战斗角色.最大兵力 = item.Role.兵力;
                data战斗角色.兵种 = item.Role.兵种.Trim();
                data战斗角色.排 = item.排;
                data战斗角色.列 = item.列;
                data战斗角色.攻 = item.Role.攻;
                data战斗角色.防 = item.Role.防;
                data战斗角色.智 = item.Role.智;
                data战斗角色.速 = item.Role.速;
                data战斗角色.特殊人物 = item.Role.特殊人物;
                data战斗角色.最大行动点 = item.Role.行动点;
                data战斗角色.技能1 = item.Role.基础攻击技能;
                data战斗角色.技能2 = item.Role.技能1;
                data战斗角色.技能3 = item.Role.技能2;
                data战斗角色.技能4 = item.Role.被动技能;
                data战斗角色.隐藏技能 = item.Role.特殊技能;
                data战斗角色.AI = item.Role.AI;
                data战斗角色.装备 = item.Role.装备;

                if (data战斗角色.技能4 != null)
                {
                    var selectList = Rance.Battle.战斗管理.GetSelectList(data战斗角色.技能4.Trim());
                    if (selectList != null)
                    {
                        UI技能选择 技能选择 = new UI技能选择()
                        {
                            队伍 = data战斗.队伍2.Name,
                            角色 = data战斗角色.Name,
                            技能 = data战斗角色.技能4,
                            SelectList = selectList
                        };
                        Win_Fight_SkillSelect win = new Win_Fight_SkillSelect(技能选择);
                        win.ShowDialog();
                        data战斗角色.战斗开始被动技能选择 = 技能选择.Select;
                    }
                }

                data战斗.队伍2.List.Add(data战斗角色);
            }

            战斗管理 战斗管理 = new 战斗管理(data战斗);


            Win_Fight win_Fight = new Win_Fight(战斗管理);
            win_Fight.ShowDialog();
        }
    }
}
